/*给你字符串 s 和整数 k.
* 请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数。
* 英文中的 元音字母 为（a, e, i, o, u）。
*
* 输入：s = "abciiidef", k = 3
* 输出：3
* 解释：子字符串 "iii" 包含 3 个元音字母。
* */

package newcoder.SlidingWindow_2;

import java.util.Locale;

public class Leetcode1456 {

    public static void main(String[] args) {

        Leetcode1456 obj = new Leetcode1456();
        String s = "tryhard";
        int k = 4;
        System.out.println(obj.maxVowels(s, k));
    }

    public int maxVowels(String s, int k){

        //暴力超时
//        s = s.toLowerCase();
//        int len = s.length(), max = Integer.MIN_VALUE;
//        for (int i = 0; i <= len - k; i++) {
//            int left = i, right = left + k - 1, count = 0;
//            for (int j = left;j <= right;j++){
//                if (s.charAt(j) == 'a' || s.charAt(j) == 'e'
//                        || s.charAt(j) == 'i' || s.charAt(j) == 'o' || s.charAt(j) == 'u' ){
//                    count++;
//                }
//            }
//            max = Math.max(count, max);
//        }
//        return max;

        //滑动窗口法
        //每次判断滑出以及当次滑入窗口的是否为元音字母，依次来对计数器进行改值
        s = s.toLowerCase();
        int count = 0, len = s.length();
        for (int i = 0;i < k;i++){
            count += isVowels(s.charAt(i));
        }
        int res = count;
        for (int i = k; i < len; i++) {
            count += isVowels(s.charAt(i)) - isVowels(s.charAt(i - k));
            res = Math.max(res, count);
        }
        return res;
    }

    public int isVowels(char c){
        return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ? 1:0;
    }
}
